#pragma once  // 防止头文件重复包含

// 包含必要的系统头文件
#include <iostream>
#include <string>
#include <cerrno>      // 错误号定义
#include <cstring>     // 字符串操作
#include <cstdlib>     // 标准库函数
#include <sys/types.h> // 基本系统数据类型
#include <sys/stat.h>  // 文件状态
#include <unistd.h>    // UNIX标准函数
#include <fcntl.h>     // 文件控制

// 定义命名管道文件名和权限
#define FIFO_FILE "./myfifo"
#define MODE 0664  // 用户读写，组读写，其他读

// 错误码枚举
enum
{
    FIFO_CREATE_ERR = 1,  // 创建管道失败
    FIFO_DELETE_ERR,      // 删除管道失败
    FIFO_OPEN_ERR         // 打开管道失败
};

// 初始化类，用于管理命名管道的创建和删除
class Init
{
public:
    Init()
    {
        // 创建命名管道
        int n = mkfifo(FIFO_FILE, MODE);
        if (n == -1)
        {
            perror("mkfifo");
            exit(FIFO_CREATE_ERR);
        }
    }
    ~Init()
    {
        // 删除命名管道
        int m = unlink(FIFO_FILE);
        if (m == -1)
        {
            perror("unlink");
            exit(FIFO_DELETE_ERR);
        }
    }
};